[算法入门]快速排序非递归方法(Java实现),大家一起来找茬啊~

本文介绍了快速排序算法的非递归实现方法,通过选取数组的第一个元素作为key值,从右到左寻找小于key的值,再从左到右寻找大于key的值,不断调整数组,直到左右指针相遇,最后利用Java的堆栈数据结构存储每段的最小下标和最大下标,以对数组的两段分别进行排序。
摘要由CSDN通过智能技术生成

基础

总结一下,快速排序的步骤:
1、找到一个key值(这里我们选取数组第一个值),先从右到左找,左指针不断右移,找到一个比它小的值,将这个值放到左指针所在位置。
2、然后从左往右找,右指针不断左移,找到一个比它大的值,将其放到右指针所在位置。
4、继续,直到从右往左找的数字和从左往右找的数字下标重合。将key值赋予左右指针重合所指位置。
5、这时key值左边就全是比它小的数字,key值右边全是比它大的数字。
6、以key值为基准,将数组分为两段,左边和右边重新进行以上5步。

所以在程序中每次循环我们需要记录的值有:
1、从右往左找时,比key值大的下标
2、从左往右找时,比key值小的下标
3、key值
4、将数组分段后,每段的最小下标和最大下标。

对于第4点,因为java中有现在堆栈这种数据结构,好了,不选了,就用它来存储。下面直接贴上源代码。

public int[] quickSort_not_recursion(int[] result) {
        int i;
        int j;
        int min;    // Every loop's max index
        int max;    // Every loop's minus index
        int key;

        Stack<Integer> conditions = new Stack<Integer>();   // Record the minus index and the max index
        conditions.pus
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值